﻿using Grow.Module;

namespace Grow.AspNetCore
{
    public class ModuleBuilder : IModuleBuilder
    {
        private readonly List<IModule> _growModules;

        public ModuleBuilder()
        {
            _growModules = new();
        }


        public IModuleBuilder AddModule<TModule>() where TModule : IModule, new()
        {
            TModule module = new();
            if (!_growModules.Contains(module))
            {
                _growModules.Add(module);
            }
            return this;
        }

        public IEnumerable<IModule> GetModules()
        {
            return _growModules;
        }

        public void Load()
        {
            List<IModule> newgrowModules = _growModules
                .OrderBy(m => m.Level)
                .ThenBy(m => m.Order)
                .ThenBy(m => m.GetType().FullName)
                .ToList();

            _growModules.Clear();
            _growModules.AddRange(newgrowModules);
        }



        #region 私有

        #endregion
    }
}
